﻿package main

import (
    "fmt"
    "bufio"
    "os"
)

func count(str string) (int, int, int, int) {
    var c1, c2, c3, c4 int
    t := []rune(str)
    for _, v := range t {
        switch {
        case v >= 'a' && v <= 'z', v >= 'A' && v <= 'Z':
            c1++
        case v == ' ':
            c2++
        case v >='0' && v <= '9':
            c3++
        default:
            c4++
        }
    }
    return c1, c2, c3, c4
}

func main() {
    fmt.Print("请输入一段文字：")
    //fmt.Scanf("%s", &s)  // 这种不支持带空格的字符串输入
    reader := bufio.NewReader(os.Stdin)
    str, _, err := reader.ReadLine()
    if err != nil { 
        fmt.Println("error:", err)
        return
    }
    s := string(str)  // str 的类型是[]byte，里面是一个个的字符
    c1, c2, c3, c4 := count(s)
    fmt.Println("字母：", c1)
    fmt.Println("空格：", c2)
    fmt.Println("数字：", c3)
    fmt.Println("其他：", c4)
}